package edu.luc.cs413s13.team1.monsterm.model;

import java.util.List;

import edu.luc.cs413s13.team1.monsterm.model.cell.CellWorld;
import edu.luc.cs413s13.team1.monsterm.model.common.LevelChangeListener;
import edu.luc.cs413s13.team1.monsterm.model.common.ModelChangeListener;
import edu.luc.cs413s13.team1.monsterm.model.common.MonsterStateChangeListener;
import edu.luc.cs413s13.team1.monsterm.model.monster.Actor;

/**
 * Model doesn't listen to any party
 *
 */
public interface MonstermModel  extends TimerChangeListener, MonsterStateChangeListener {
	// TODO is this method really necessary? Listener can be registered in constructor
	public void setModelChangeListener(ModelChangeListener listener);
	//public void setMonsterStateChangeListener(MonsterStateChangeListener listener);
	public CellWorld getWorld(); // TODO to be re-thought 
	public void addActor(Actor actor, int xpos, int ypos);
	public List<Actor> getLivingActors();
	public int getScore();
	public void updateScore(int score);
	public int getCurrentLevel();
	public void addLivingActor(Actor actor);
	public void removeLivingActor(Actor actor);
	public void setLevelChangeListener(LevelChangeListener listener);
	public void onExitMonsterm();
}
